#include<bits/stdc++.h>

using namespace std ;

const int N=15,L=15,M=15;

float d[N],a[N],v[N],p[N] ;
int T;
int n,m;
float l,V ;
int cnt[N],ctv=0 ;

bool mst[N] ;
bool check1(float d0,float a0,float v0,float cam)
{
    float s=cam-d0;
    
    float v=v0*v0+2*a0*s ;
    
    if (v<0) return true ;
    //v=sqrt(v) ;

    if(v*v<=V*V) return  true ;
    else return false ;
}
bool check2(float d0,float a0,float v0,float cam)
{
    float s=cam-d0;
    
    float v=v0*v0+2*a0*s ;
    
    if (v<0) return false ;
    v=sqrt(v) ;

    if(v>V) return true ;
    else return false;
}

int main()
{
    freopen("detect.in","r",stdin) ;
    freopen("detect.out","w",stdout) ;
    scanf("%d",&T) ;
    for(int t=1 ;t<=T ;++t)
    {
        memset(d,0,sizeof(d)) ;
        memset(a,0,sizeof(a)) ;
        memset(v,0,sizeof(v)) ;
        memset(p,0,sizeof(p)) ;
        memset(cnt,0,sizeof(cnt)) ;
        memset(mst,0,sizeof(mst)) ;
        
        ctv=0;
        
        scanf("%d%d%f%f",&n,&m,&l,&V) ;
        for(int i=1;i<=n ;++i) scanf("%f%f%f",&d[i],&v[i],&a[i]) ;
        for(int i=1 ;i<=m ;++i) scanf("%f",&p[i]) ;
        sort(p+1,p+1+n) ;
        int ans2=0;
        vector <int> outv[n+5] ;
        for(int i=1 ;i<=n ;++i)
        {
            double d0=d[i],v0=v[i],a0=a[i] ;
            bool sig=false ;
            int l=lower_bound(p+1,p+1+m,d0)-p,r=m+1;
            if(a0>0)
            {
                while(l<r&&l<=m)
                {   
                    int mid=(l+r)>>1 ;
                    if(check1(d0,a0,v0,p[mid])) 
                    {
                        l=mid+1;//check1 shi fou bu chao su
                        
                    }
                    else
                    {
                        r=mid ;sig=true ;
                    }  
                }
                
                if(sig)
                {
                    cnt[i]+=m-l+1;
                    ++ctv ;
                    for(int j=l ;j<=m ;++j)outv[j].push_back(i) ;
                }  
                
                
            } 
            else if(a0==0)
            {
                if(v0>V) 
                {
                    cnt[i]+=m-l+1;ctv++;
                    for(int j=l ;j<=m ;++j)outv[j].push_back(i) ;
                }
                
            }
            else if(a0<0)
            {
                int l0=l, mid1=-1;
                while(l0<r&&l0<=m)
                {   
                    int mid=(l0+r)>>1 ;
                    if(mid1==mid) break;
                    else mid1=mid;
                    if(check2(d0,a0,v0,p[mid])) 
                    {
                        l0=mid;//check2 shi fou chao su
                        sig=true;
                    }
                    else 
                    {
                        r=mid-1; 
                    }
                }
                
                if(sig)
                {
                    cnt[i]+=l0-l+1;++ctv;
                    for(int j=l ;j<=l0 ;++j)outv[j].push_back(i) ;
                }
            }
            //if(!sig) printf("%d\n",i);
        } 
        
        for(int i=1 ;i<=m ;++i)
        {
            
            for(auto j:outv[i])
            {
                if(cnt[j]-1<=0)
                {
                    mst[i]=true;
                    //cnt[j]--;
                }
            }
            if(!mst[i])
            {
                ++ans2;
                for(auto j:outv[i])
                {
                    cnt[j]--;
                }
            } 
        }

        printf("%d %d\n",ctv,ans2) ;
    }
}